home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Tool Chest / Development Tools & Languages / Macintosh Common Lisp Related / CLiCC-CodeWarrior-0.6.2 / CLiCC-CodeWarrior-0.6.2.sit / clicc-0.6.2 / doc / module.doc < prev    next >
Encoding:
Text File  |  1993-06-15  |  3.4 KB  |  76 lines

  1. Projekt  : APPLY - A Practicable And Portable Lisp Implementation
  2.            ------------------------------------------------------
  3.            Anmerkungen zur Modulkompilation
  4.  
  5. $Revision: 1.1 $
  6. $Log: module.doc,v $
  7. # Revision 1.1  1993/06/15  09:11:02  hk
  8. # Initial revision
  9. #
  10.  
  11. Keywords
  12. --------
  13. Es gibt ein Keyword-Package, aber kein Keyword-Modul. Deshalb kann
  14. jedes Modul definierende Vorkommen von Keywords enthalten. Es mu"s
  15. verhindert werden, da"s in zwei unabh"angigen Modulen m1 und m2, die
  16. von einem weiteren Modul importiert werden, das selbe Keyword zweimal
  17. definiert wird. Deshalb wird gefordert, da"s die Definition eines
  18. Keywords in einem Modul m1-2 erfolgen mu"s, wenn es sowohl in m1 als
  19. auch in m2 zum ersten mal (definierend) verwendet wird. m1-2 mu"s
  20. sowohl von m1 als uch von m2 importiert werden.
  21.  
  22. Inline Funktionen
  23. -----------------
  24. Der Compiler hat spezielles Wissen "uber den zu generierenden C Code f"ur
  25. Aufrufe von Funktionen wie eq, cons, integerp etc. .
  26. F"uer diese Funktionen m"ussen auch Definitionen bereitgestellt werden
  27. f"ur den Fall, da"s sie als funktionales Objekt verwendet werden. 
  28. Die Definitionen k"onnten in C aufgeschrieben werden, dann h"atte man
  29. den Code jedoch zweimal zu warten: in der C-Datei und im Compiler.
  30. Deshalb ist es angenehm, die Definitionen in Lisp in der Form
  31. (defun cons (x y) (cons x y)) zu schreiben.
  32. Diese Definitionen sind in der Datei inline.lisp zusammengefa"st und
  33. werden von Compiler in einem besonderen Modus *inline-module*
  34. uebersetzt.  Im diesem Modus ist eine Redefinition von
  35. Systemfunktionen erlaubt, angewandte Vorkommen verweisen jedoch
  36. weiterhin auf die Systemfunktion. Weiterhin wird keine Modul
  37. Beschreibung (.syntax, .def Dateien) generiert, da dem Compiler die
  38. Funktionen schon bekannt sind. Die Datei inline.h wird von der Datei
  39. lisp.h included.
  40.  
  41. Lisp Modul
  42. ----------
  43. Das Lisp-Modul wird im Modus *lisp-module* "ubersetzt. Dieser Modus
  44. bewirkt, da"s die Modul Beschreibung f"ur das Lisp Modul nicht gelesen
  45. wird. Das Lisp Modul enth"alt neben Definitionen f"ur das Lisp Package
  46. auch Definitionen f"ur das Runtime Package. Die
  47. Initialisierungsfunktion des Lisp Moduls tr"agt die im Lisp Modul
  48. definierten Symbole erst am Ende der Initialisierung in das Lisp
  49. Package ein, da dann erst das Package System initialisiert ist.
  50.  
  51. Makros, die Lisp Funktionen benutzen
  52. ------------------------------------
  53. Bei der "Ubersetzung des Lisp Moduls sind die meisten Lisp Funktionen
  54. zun"achst weder als importierte noch als definierte Funktion bekannt.
  55. Bei der Makroexpansion m"ussen jedoch Lisp Funktionen, z.B. member,
  56. ausgef"uhrt werden. Deshalb enthalten die Zwischensprachdarstellungen
  57. von Makroexpansionsfunktionen den Typ function (des Wirts Lispsystems)
  58. zus"atzlich zu imported-fun und global-fun. 
  59. Dies gilt aus Effizienzgr"unden f"ur alle Vorkommen von Funktionen des Lisp
  60. Package in Makroexpansionsfunktionen, also nicht nur bei der
  61. "Ubersetzung des Lisp Moduls.
  62.  
  63. System Modul
  64. ------------
  65. Im System Modul sind die Symbole NIL und T definiert. Sie werden
  66. jedoch erst von der Initialisierungsfunktion des Lisp Moduls in das
  67. Lisp Package eingetragen.
  68.  
  69. Initialisierung und Garbage Collection
  70. --------------------------------------
  71. Jedes Modul definiert eine Initialisierungsfunktion mit dem Namen
  72. "I<module-name>". Die Initialisierungsfunktion des Hauptmoduls hei"st
  73. "Imain". Das Hauptmodul definiert eine Funktion gc_main, die vom
  74. Garbage Collector aufgerufen wird und alle Symbole des Hauptmoduls und
  75. der importierten Module traversiert.
  76.